package com.hliushi.redis.task;

import com.hliushi.redis.config.Constants;
import com.hliushi.redis.utils.IDWorker;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author llhuang10
 * @date 2021/8/14 11:24
 */
@Slf4j
@Component
public class TaskCrowdService {


    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Resource
    private IDWorker idWorker;

    /**
     * 提前先把数据刷新到redis缓存汇总
     *
     * @param
     * @return
     */
    @PostConstruct
    public void initData() {
        // 一开始向redis数据库中插入一些数据

        // Boolean.TRUE 与原始值true对应的Boolean对象
        // 当且仅当参数不为null, 并且表示与此对象相同的boolean值的Boolean对象, 才返回true
        boolean bool = Boolean.TRUE.equals(redisTemplate.hasKey(Constants.PRICE_KEY));
        // 判断一下
        if (!bool) {
            List<String> taobaoPrice = this.priceInit();
            taobaoPrice.forEach(item -> redisTemplate.opsForSet().add(Constants.PRICE_KEY, item));
            log.info("redis data init success!");
        }
    }


    /**
     * 思路: 这里类似于公司年会抽奖, 就是率先把所有的员工的id放进redis
     */
    private List<String> priceInit() {
        List<String> result = new ArrayList<>();

        // 模拟从数据库查询出所有员工的id列
        for (int i = 0; i < 100; i++) {
            result.add(idWorker.nextId() + "");
        }
        return result;
    }
}
